package com.zeng.ssm.api.support.idempotent;

import java.util.concurrent.TimeUnit;

/**
 * memcached或Redis分布式锁服务
 *
 * @author zengwanlin
 * @date 2021-11-04T9:49
 */
public interface DistributedLockService {

    /**
     * 向缓存中存储数据
     *
     * @param key   键
     * @param value 值
     * @return
     */
    boolean setIfAbsent(final String key, final String value);

    /**
     * 向缓存中存储数据
     *
     * @param key     键
     * @param value   值
     * @param timeout 过期时间
     * @param unit    timeout单位
     * @return
     */
    boolean setIfAbsent(final String key, final String value, long timeout, TimeUnit unit);

    /**
     * 删除缓存数据
     *
     * @param key 键
     * @return
     */
    boolean deleteAnyway(final String key);

    /**
     * 加锁
     *
     * @param key     键(String字符串，非Json)
     * @param value   值(String字符串，非Json)
     * @param timeout 超时时间(秒)
     * @return
     */
    boolean lock(final String key, final String value, final long timeout);

    /**
     * 解锁
     *
     * @param key   键(String字符串，非Json)
     * @param value 值(String字符串，非Json)
     * @return
     */
    boolean unlock(final String key, final String value);

}
